package com.example.springaop.myAop.staticStateProxy;

import com.example.springaop.myAop.ArithmeticCalculator;
import com.example.springaop.myAop.ArithmeticCalculatorImpl;
import com.example.springaop.myAop.MyLogger;

public class Main {
    public static void main(String[] args) {
        // 静态代理实现
        ArithmeticCalculator arithmeticCalculator = new ArithmeticCalculatorImpl();
        MyLogger myLogger = new MyLogger();
        ProxyLogger proxy = new ProxyLogger(arithmeticCalculator, myLogger);

        System.out.println(proxy.add(1, 9));
        System.out.println(proxy.mul(3, 3));

        /*总结
        这是一个很基础的静态代理，业务类 ArithmeticCalculatorImpl 只需要关注业务逻辑本身，保证了业务的重用性，这也是代理类的优点，没什么好说的。
        我们主要说说这样写的缺点：
        1.代理对象的一个接口只服务于一种类型的对象，如果要代理的方法很多，势必要为每一种方法都进行代理，静态代理在程序规模稍大时就无法胜任了。
        2.如果接口增加一个方法，比如 ArithmeticCalculatorImpl 增加归零 changeZero(）方法，
        则除了所有实现类需要实现这个方法外，所有代理类也需要实现此方法。增加了代码维护的复杂度。*/

    }
}
